package com.fabriciojf.exemplos;

import com.fabriciojf.model.Js_Role;
import com.fabriciojf.persistence.JpaUtil;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;

/**
 * Modelos de persistencia via jpa
 *
 * @author Fabricio S Costa fabriciojf@gmail.com
 * @since 01/12/2009
 * @version 1.0
 */
public class ModeloJPA {

    /*
     * exemplo do padrão de projeto singleton
     * desde modo você sempre pega apenas uma instancia de RoleDAO
     * e não precisa criar um objeto para utilizar a classe
     *
     * ex:
     * não será mais necessário utilizar a RoleDAO deta forma:
     * RoleDAO roledao = new RoleDAO();
     *
     * agora ela poderá ser acessada assim:
     * RoleDAO.getInstance().getRole();
     *
     */
    private static ModeloJPA instance = new ModeloJPA();

    public static ModeloJPA getInstance() {
        return instance;
    }

    /*
     * exemplo de listagem com Jpa
     *
     */
    public List<Js_Role> lista() {        
        return JpaUtil.getEntityManager()
                .createQuery("from js_role").getResultList();
    }

    /*
     * exemplo de consulta like com Jpa
     * 
     */
    public List<Js_Role> procura(String role) {
        String oql = "from Js_Role where upper(rolename) like :role";
        Query select = JpaUtil.getEntityManager().createQuery(oql);
        select.setParameter("role", "%" + role.toUpperCase() + "%");
        return select.getResultList();
    }

    /*
     * exemplo de find com Jpa
     *
     */
    public Js_Role localiza(int id) {
        return (Js_Role) JpaUtil.getEntityManager().find(Js_Role.class, id);
    }

    /*
     * exemplo de save com Jpa
     *
     */
    public Js_Role salva(Js_Role role) {
        Js_Role u = null;
        EntityManager em = JpaUtil.getEntityManager();
        em.getTransaction().begin();
        try {
            u = em.merge(role);
            em.getTransaction().commit();
        } catch (Exception ex) {
            em.getTransaction().rollback();
        }
        return u;
    }

    /*
     * exemplo de delete com Jpa
     *
     */
    public void remove(Js_Role role) {
        EntityManager em = JpaUtil.getEntityManager();
        em.getTransaction().begin();
        try {
            em.remove(role);
            em.getTransaction().commit();
        } catch (Exception ex) {
            em.getTransaction().rollback();
        }
    }
}
